home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Technotools
/
Technotools (Chestnut CD-ROM)(1993).ISO
/
lantools
/
blueprnt
/
symtab.c
< prev
Wrap
C/C++ Source or Header
|
1990-11-14
|
2KB
|
77 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int hash_code (char key[10])
{
return(toupper(key[1])*strlen(key)%50);
}
int symbol_check (symbol_rec *symbol; int modify)
{
symbol_rec *temp_ptr=NULL, *search_ptr=NULL, *previous_ptr=NULL;
int located;
symbol.key=hash_code(symbol.symbol);
search_ptr=table;
while (!(search_ptr==NULL) && !(symbol.key==search_ptr->key))
{
previous_ptr=search_ptr;
if (symbol.key<search_ptr.key)
search_ptr=search_ptr->left;
else
search_ptr=search_ptr->right;
}
if (search_ptr==NULL)
{
located=false;
temp_ptr=malloc(sizeof(symbol_rec));
temp_ptr=symbol;
temp_ptr->left=NULL;
temp_ptr->right=NULL;
temp_ptr->list=NULL;
if (search_ptr==table)
table=temp_ptr;
else
if (symbol.key<previous_ptr->key)
previous_ptr->left=temp_ptr;
else
previous_ptr->right=temp_ptr;
}
else
{
located=false;
while ((search_ptr<>NULL) && (symbol.symbol<>search_ptr->symbol))
{
previous_ptr=search_ptr;
search_ptr=search_ptr->list;
}
if (search_ptr=NULL)
{
located=false;
temp_ptr=malloc(sizeof(symbol_rec);
*temp_ptr=symbol;
temp_ptr->list=NULL;
temp_ptr->left=NULL;
temp_ptr->right=NULL;
previous_ptr->list=temp_ptr;
}
else
{
located=true;
if !(modify)
symbol=search_ptr;
else
{
symbol_ptr->location=symbol.location;
search_ptr->symbolt=symbol.symbolt;
}
}
}
}
located=false